package demo.letcode._面试150;

import java.util.Arrays;

/**
 * 给你一个非严格递增排列的数组nums，请你原地删除重复出现的元素，使每个元素只出现一次，返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。
 * 考虑nums的唯一元素的数量为k，你需要做以下事情确保你的题解可以被通过：
 * 更改数组nums，使nums的前k个元素包含唯一元素，并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。
 * 返回k。
 * 示例1：
 * 输入：nums=[1,1,2]
 * 输出：2,nums=[1,2,_]
 * 解释：函数应该返回新的长度2，并且原数组nums的前两个元素被修改为1,2。不需要考虑数组中超出新长度后面的元素。
 * 示例2：
 * 输入：nums=[0,0,1,1,1,2,2,3,3,4]
 * 输出：5,nums=[0,1,2,3,4]
 * 解释：函数应该返回新的长度5,并且原数组nums的前五个元素被修改为0,1,2,3,4。不需要考虑数组中超出新长度后面的元素。
 *
 */
public class _26删除有序数组中的重复项 {
    public static void main(String[] args) {
        int[] arr = {1, 1, 3, 2, 1, 3, 1, 2};
        removeDuplicates(arr);
    }

    public static void removeDuplicates(int[] nums) {
        // 1, 1, 3, 2, 1, 3, 1, 2
        // 1, 3, 2, 2, 1, 3, 1, 2
        int slow = 0; // 指向当前唯一元素的最后一个位置
        for (int fast = 1; fast < nums.length; fast++) {
            boolean exist = false;

            // 每次遍历slow 是否已存在
            for (int i = 0; i <= slow; i++) {
                if (nums[i] == nums[fast]) {
                    exist = true;
                    break;
                }
            }
            // 如果是新出现的元素，添加到结果中
            if (!exist) {
                slow++;
                nums[slow] = nums[fast];//将slow的值设置成fast
            }

        }
        System.out.println(Arrays.toString(nums));
    }
}
